import request from '@/utils/axios'

export interface FilePageReqType extends PageParam {
  path?: string
  type?: string
  createTime?: Date[]
}

// 文件预签名地址 Response Type
export interface FilePresignedUrlResponseType {
  // 文件配置编号
  configId: number
  // 文件上传 URL
  uploadUrl: string
  // 文件 URL
  url: string
}

// 文件上传客户端相关配置
export interface FileClientConfigType {
  basePath: string
  host?: string
  port?: number
  username?: string
  password?: string
  mode?: string
  endpoint?: string
  bucket?: string
  accessKey?: string
  accessSecret?: string
  domain: string
}

// 文件存储器配置
export interface FileConfigType {
  id: number
  name: string
  storage?: number
  master: boolean
  visible: boolean
  config: FileClientConfigType
  remark: string
  createTime: Date
}

// 文件上传配置
export interface FileUploadConfigType {
  // 图片上传接受的图片类型
  image_exts: string
  // 媒体上传接受的媒体类型
  video_exts: string
  // 其它文件上传接受的文件类型
  file_exts: string
  // 图片上传大小限制 （默认后端存储以字节为单位，前端自行转化为KB或MB）
  image_size: number
  // 媒体上传大小限制 （默认后端存储以字节为单位，前端自行转化为KB或MB）
  video_size: number
  // 文件上传大小限制 （默认后端存储以字节为单位，前端自行转化为KB或MB）
  file_size: number
}

// 文件相关API
export const FileApi = {
  // 创建文件
  create: (data: any) => {
    return request.post({ url: '/infra/file/create', data, is_mock: true })
  },
  // 更新文件信息（图片的alt、描述、title、宽高等信息）
  update: (data: any) => {
    return request.upload({ url: '/infra/file/update', data, is_mock: true })
  },
  // 删除文件
  delete: (id: number) => {
    return request.delete({ url: '/infra/file/delete?id=' + id, is_mock: true })
  },
  // 获取文件详情，资源管理器中图片的宽高、名称等信息，及视频的封面图信息
  detail: (id: number) => {
    return request.get({ url: '/infra/file/get?id=' + id, is_mock: true })
  },
  // 查询文件分页列表
  page: (params: FilePageReqType) => {
    return request.get({ url: '/infra/file/page', params, is_mock: true })
  },
  // 查询文件列表
  list: params => {
    return request.get({ url: '/infra/file/list', params, is_mock: true })
  },
  // 查询文件列引用情况
  check: params => {
    return request.get({ url: '/infra/file/check', params, is_mock: true })
  },
  // 获取文件预签名地址
  presignedUrl: (path: string) => {
    return request.get<FilePresignedUrlResponseType>({
      url: '/infra/file/presigned-url',
      params: { path },
      is_mock: true
    })
  },
  // 上传文件
  upload: (data: any) => {
    return request.upload({ url: '/infra/file/upload', data, is_mock: true })
  },
  // 上传文件带进度条
  uploadProgress: (data: any, onUploadProgress: any) => {
    return request.upload({ url: '/infra/file/upload', data, onUploadProgress, is_mock: true })
  }
}

// 文件夹相关API
export const FolderApi = {
  // 创建文件夹
  create: (data: any) => {
    return request.post({ url: '/infra/folder/create', data, is_mock: true })
  },
  // 更新文件夹
  update: (data: any) => {
    return request.post({ url: '/infra/folder/update', data, is_mock: true })
  },
  // 文件夹、文件移动
  move: (data: any) => {
    return request.post({ url: '/infra/folder/move', data, is_mock: true })
  },
  // 删除文件夹
  delete: (id: number) => {
    return request.delete({ url: '/infra/folder/delete?id=' + id, is_mock: true })
  },
  // 查询文件夹列表
  list: params => {
    return request.get({ url: '/infra/folder/list', params, is_mock: true })
  }
}

// 回收站相关API
export const RecycleApi = {
  // 查询回收站文件列表
  list: params => {
    return request.get({ url: '/infra/recycle/list', params, is_mock: true })
  },
  // 还原回收站文件
  return: data => {
    return request.post({ url: '/infra/recycle/return', data, is_mock: true })
  },
  // 删除回收站文件
  delete: data => {
    return request.delete({ url: '/infra/recycle/delete', data, is_mock: true })
  }
}

// 上传配置
export const UploadConfigApi = {
  // 保存上传配置
  save: data => {
    return request.post({ url: '/infra/upload-config/save', data, is_mock: true })
  },
  // 获取上传配置
  detail: () => {
    return request.get({ url: '/infra/upload-config/get', is_mock: true })
  }
}
